function calculate(num1, operator, num2) {
    // 检查操作数是否为有效数字
    const parsedNum1 = parseFloat(num1);
    const parsedNum2 = parseFloat(num2);
    if (isNaN(parsedNum1) || isNaN(parsedNum2)) {
        throw new Error("操作数必须为有效数字");
    }

    // 检查运算符有效性
    if (!["+", "-", "*", "/"].includes(operator)) {
        throw new Error("无效的运算符");
    }

    // 检查除数是否为零
    if (operator === "/" && parsedNum2 === 0) {
        throw new Error("除数不能为零");
    }

    // 执行运算
    switch (operator) {
        case "+":
            return parsedNum1 + parsedNum2;
        case "-":
            return parsedNum1 - parsedNum2;
        case "*":
            return parsedNum1 * parsedNum2;
        case "/":
            return parsedNum1 / parsedNum2;
    }
}

// 测试用例
const tests = [
    { args: [1, "+", 2], expected: 3 },
    { args: [3, "-", 2], expected: 1 },
    { args: [2, "*", 3], expected: 6 },
    { args: [4, "/", 2], expected: 2 },
    { args: ["a", "+", 2], error: "操作数必须为有效数字" },
    { args: [3, "/", 0], error: "除数不能为零" },
    { args: [5, "%", 3], error: "无效的运算符" },
];

// 运行测试
tests.forEach((test, index) => {
    try {
        const result = calculate(...test.args);
        if (result === test.expected) {
            console.log(`✅ 测试用例 ${index + 1} 通过`);
        } else {
            console.log(`❌ 测试用例 ${index + 1} 失败，预期 ${test.expected}，得到 ${result}`);
        }
    } catch (error) {
        if (test.error && error.message === test.error) {
            console.log(`✅ 测试用例 ${index + 1} 通过`);
        } else {
            console.log(`❌ 测试用例 ${index + 1} 失败，预期错误：${test.error}，实际错误：${error.message}`);
        }
    }
});